TiDB Cloudに対して、プライベートサブネットのEC2からsysbenchで負荷テストをする環境を構築してみた

TiDB Cloudに対して、プライベートサブネットのEC2からsysbenchで負荷テストをする環境を構築してみた

Clock Icon2024.07.24

こんにちは、ゲームソリューション部のsoraです。
今回は、TiDB Cloudに対して、プライベートサブネットのEC2からsysbenchで負荷テストをする環境を構築してみたことについて書いていきます。

はじめに

今回構築する構成は以下です。
プライベートサブネットにあるEC2からTiDB CloudのDedicatedクラスタにVPCピアリングで接続して、DB接続・sysbenchの実行ができるようにします。
sr-tidb-sysbench01_v2

流れとしては以下です。

  • AWS環境構築1(VPCの作成)
  • VPCピアリング接続の作成
  • AWS環境構築2(VPC以外の作成)
  • TiDB Cloudでのクラスタ作成・接続準備
  • EC2へのsysbenchのインストール
  • TiDB CloudのDedicatedクラスタへの接続・sysbenchの実行

AWS環境構築1(VPCの作成)

TiDB Cloudと接続するVPCを作成します。
構成図の通り、Private SubnetとPublic Subnetが1つずつあれば良いです。

VPCピアリング接続の作成

以下のTiDB Cloud公式ドキュメントを参考に設定していきます。
https://docs.pingcap.com/ja/tidbcloud/set-up-vpc-peering-connections

TiDB CloudのProject Settingsにて、先ほど作成したVPCの情報を元にVPCピアリング接続を作成します。
sr-tidb-sysbench02
sr-tidb-sysbench03

AWSにてVPCピアリング接続が承認待ちの状態になっているため承認してアクティブにします。

その後、TiDB Cloudへ接続するためのルートを、プライベートサブネットのルートテーブルに追加します。
送信先としてTiDB CloudのVPC CIDRを入れて、ターゲットにはピアリングIDを入れます。
どちらのパラメータもTiDB CloudのVPCピアリングの設定画面で確認できます。

AWS環境構築2(VPC以外の作成)

EC2インスタンスをプライベートサブネットに作成して、EC2 Instance Connectで接続するためのエンドポイントも作成します。
EC2インスタンスにてsysbenchをインストールするときにEPELを利用する必要があるため、NAT Gatewayも作成します。
このNAT Gatewayはsysbenchインストール後に削除しても問題ありません。

今回、TiDB CloudとはVPCピアリングで接続しますが、TLSを使ってパブリック接続する場合は、EC2インスタンスにTiDB CloudクラスタのCA証明書を配置する必要があります。
その場合は、EC2インスタンスにS3バケット経由でCA証明書を配置するなどしてください。

TiDB Cloudでのクラスタ作成・接続準備

TiDB CloudにてDedicatedクラスタを作成します。
sr-tidb-sysbench04

クラスタが作成できアクティブになったら、クラスタへ接続するための情報を取得します。
Connectボタンの横の・・・Security Settingsからパスワードを作成します。
IP Access Listについては、初期状態で全て拒否になっていますが、今回はVPCピアリング接続のため初期状態のままでも接続できます。(パブリック接続の場合は許可設定が必要)
sr-tidb-sysbench05
sr-tidb-sysbench06

次にConnectボタンにて、接続するためのコマンド(またはコード)を確認します。
sr-tidb-sysbench07

TLSを使ってパブリック接続する場合は、CA証明書をダウンロードして接続元のEC2インスタンスに配置する必要があります。
sr-tidb-sysbench08

EC2へのsysbenchのインストール

大枠の環境構築は完了したため、次にEC2へsysbenchをインストールします。
Amazon Linux 2023ではEPELがサポートされていないため、今回はAmazon Linux 2を使用します。
sysbenchを実行するだけであれば不要ですが、TiDB Cloudのクラスタへ接続するためにmysqlをインストールします。

# 初期状態で入っているMariaDBの削除(干渉を防ぐため)
sudo yum remove -y mariadb-*
# MySQLのインストール
# ※バージョンは、https://dev.mysql.com/downloads/repo/yum/ を参考にする
sudo yum localinstall -y https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
sudo yum install -y --enablerepo=mysql80-community mysql-community-server
sudo yum install -y --enablerepo=mysql80-community mysql-community-devel

# インストール後のバージョン確認
mysql --version

次にsysbenchをインストールします。

# sysbenchのインストール
sudo amazon-linux-extras install epel
sudo yum -y install sysbench

# インストール後のバージョン確認
sysbench --version

TiDB CloudのDedicatedクラスタへの接続・sysbenchの実行

環境構築と設定が完了したため、TiDB Cloudのクラスタへの接続とsysbenchの実行ができるか確認します。
まずはMySQL CLIでの接続から

# ※コマンドはTiDB CloudのConnectボタンから確認可能
$ mysql --comments --connect-timeout 15 -u root -h private-tidb.xxxxxxxx.clusters.tidb-cloud.com -P 4000 -D test -p<パスワード>
mysql: [Warning] Using a password on the command line interface can be insecure.
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1665162568
Server version: 8.0.11-TiDB-v7.5.2 TiDB Server (Apache License 2.0) Enterprise Edition, MySQL 8.0 compatible

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
mysql> exit
Bye

次にsysbenchを使ってみます。
HOSTPASSWORDの部分は、クラスタ接続時のコマンドから確認できます。
sysbenchが実行できるかどうか見たいだけなので、オプションなどは適当です。

sysbench oltp_common \
   --threads=4 \
   --db-driver=mysql \
   --mysql-db=test \
   --mysql-host={HOST} \
   --mysql-port=4000 \
   --mysql-user=root \
   --mysql-password={PASSWORD} \
   prepare --tables=4 --table-size=10

ちなみに、設定値をconfigファイルに外出しして実行することも可能みたいです。

config.file
mysql-host={HOST}
mysql-port=4000
mysql-user=root
mysql-password={PASSWORD}
mysql-db=test
time=600
threads=16
report-interval=10
db-driver=mysql
sysbench --config-file=/path/to/your/config.file <test> <options>

実行してみると、TiDB Cloud上のメトリクスも動いており、テストが実行されていることが確認できました。
sr-tidb-sysbench09
sr-tidb-sysbench10

参考ページ

sysbench導入まで

https://docs.pingcap.com/ja/tidbcloud/v7.1.0-performance-benchmarking-with-sysbench
https://dev.mysql.com/downloads/repo/yum/
https://docs.pingcap.com/ja/tidbcloud/set-up-vpc-peering-connections

sysbench使用について

https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0163
https://blog.s-style.co.jp/2018/03/1605/
https://blog.s-style.co.jp/2017/09/1030/

最後に

今回は、TiDB Cloudに対して、プライベートサブネットのEC2からsysbenchで負荷テストをする環境を構築してみたことを記事にしました。
どなたかの参考になると幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.